{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# K-means 诱导攻击实验"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\dev_tools\\anaconda\\lib\\site-packages\\sklearn\\externals\\joblib\\__init__.py:15: FutureWarning: sklearn.externals.joblib is deprecated in 0.21 and will be removed in 0.23. Please import this functionality directly from joblib, which can be installed with: pip install joblib. If this warning is raised when loading pickled models, you may need to re-serialize those models with scikit-learn 0.21+.\n",
      "  warnings.warn(msg, category=FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import sys\n",
    "import csv\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.feature_extraction.text import CountVectorizer\n",
    "from sklearn import model_selection\n",
    "from sklearn.cluster import MiniBatchKMeans as KMeans\n",
    "from sklearn.manifold import TSNE\n",
    "from sklearn.externals import joblib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#处理域名的最小长度\n",
    "MIN_LEN=10\n",
    "\n",
    "#随机程度\n",
    "random_state = 170"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def load_alexa(filename):\n",
    "    domain_list=[]\n",
    "    csv_reader = csv.reader(open(filename))\n",
    "    for row in csv_reader:\n",
    "        domain=row[1]\n",
    "        if len(domain) >= MIN_LEN:\n",
    "            domain_list.append(domain)\n",
    "    return domain_list\n",
    "\n",
    "def domain2ver(domain):\n",
    "    ver=[]\n",
    "    for i in range(0,len(domain)):\n",
    "        ver.append([ord(domain[i])])\n",
    "    return ver\n",
    "\n",
    "\n",
    "def load_dga(filename):\n",
    "    domain_list=[]\n",
    "    #xsxqeadsbgvpdke.co.uk,Domain used by Cryptolocker - Flashback DGA for 13 Apr 2017,2017-04-13,\n",
    "    # http://osint.bambenekconsulting.com/manual/cl.txt\n",
    "    with open(filename) as f:\n",
    "        for line in f:\n",
    "            domain=line.split(\",\")[0]\n",
    "            if len(domain) >= MIN_LEN:\n",
    "                domain_list.append(domain)\n",
    "    return  domain_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def tsne_data():\n",
    "    x1_domain_list = load_alexa(\"data/dga/top-100.csv\")\n",
    "    x2_domain_list = load_dga(\"data/dga/dga-cryptolocke-50.txt\")\n",
    "    x3_domain_list = load_dga(\"data/dga/dga-post-tovar-goz-50.txt\")\n",
    "    x_domain_list = np.concatenate((x1_domain_list, x2_domain_list,x3_domain_list))\n",
    "    y1 = [0]*len(x1_domain_list)\n",
    "    y2 = [1]*len(x2_domain_list)\n",
    "    y3 = [1]*len(x3_domain_list)\n",
    "    y = np.concatenate((y1, y2,y3))\n",
    "    y_ = np.abs(y-1)\n",
    "    cv = CountVectorizer(ngram_range=(2, 2), decode_error=\"ignore\", token_pattern=r\"\\w\", min_df=1)\n",
    "    x = cv.fit_transform(x_domain_list).toarray()\n",
    "    tsne = TSNE(learning_rate=100)\n",
    "    plt_x = tsne.fit_transform(x)\n",
    "    return x, y, y_, plt_x\n",
    "    \n",
    "def kmeans_dga():\n",
    "    x, y, y_, plt_x = tsne_data()\n",
    "    model=KMeans(n_clusters=2, max_iter=500, batch_size=1, random_state=random_state)\n",
    "    model.fit(x)   \n",
    "    joblib.dump(model,'model/kmeans.m')    \n",
    "    y_pred = model.predict(x)\n",
    "    yscore = 1 - np.sum(np.abs(y - y_pred)) / y_pred.shape[0]\n",
    "    y_score = 1 - np.sum(np.abs(y_ - y_pred)) / y_pred.shape[0]\n",
    "    result = max(yscore,y_score)\n",
    "    print(\"准确率达到: {:.2f}%\".format(result*100))\n",
    "    return x, y_pred, plt_x\n",
    "\n",
    "def plot(x,y_pred):\n",
    "    for i,label in enumerate(x):\n",
    "        x1,x2=x[i]\n",
    "        if y_pred[i] == 1:\n",
    "            plt.scatter(x1, x2, marker='o')\n",
    "        else:\n",
    "            plt.scatter(x1, x2, marker='x')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "准确率达到: 73.42%\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x, y_pred, plt_x = kmeans_dga()\n",
    "plot(plt_x,y_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 开始诱导攻击\n",
    "\n",
    "## 1.通过可视化确定目标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_bad(x,y_pred):\n",
    "    for i in range(x.shape[0]):\n",
    "        x1,x2=x[i]\n",
    "        if y_pred[i] == 1:\n",
    "            plt.scatter(x1, x2, marker='o')\n",
    "            plt.annotate(i, xy=(x1,x2), xytext=(x1,x2))\n",
    "    plt.show()\n",
    "    \n",
    "plot_bad(plt_x, y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_good(x,y_pred):\n",
    "    for i in range(x.shape[0]):\n",
    "        x1,x2=x[i]\n",
    "        if y_pred[i] == 0:\n",
    "            plt.scatter(x1, x2, marker='x')\n",
    "            plt.annotate(i, xy=(x1,x2), xytext=(x1,x2))\n",
    "    plt.show()\n",
    "    \n",
    "plot_good(plt_x, y_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析：确定攻击范围"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_from = np.array([x[0]])\n",
    "x_to = np.array([x[118]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,\n",
       "        1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int64)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_from"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,\n",
       "        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n",
       "        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], dtype=int64)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_to"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\n",
      "[1]\n"
     ]
    }
   ],
   "source": [
    "model = joblib.load(\"model/kmeans.m\")\n",
    "print(model.predict(x_from))\n",
    "print(model.predict(x_to))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 编写攻击过程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = joblib.load(\"model/kmeans.m\")\n",
    "epoch = 250\n",
    "step = 1\n",
    "points_num = 10\n",
    "decay_ratio = 0.1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 建立攻击数据库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(10, 983)\n"
     ]
    }
   ],
   "source": [
    "def create_A(x_from, x_to, points_num):\n",
    "    x1 = x_from[0,:]\n",
    "    x2 = x_to[0,:]\n",
    "    points = []\n",
    "    for index in range(x1.shape[0]):\n",
    "        points.append(np.linspace(x1[index],x2[index],points_num))\n",
    "    points = np.array(points).T\n",
    "    points = np.vstack([points, x2])\n",
    "    print(points.shape)\n",
    "    return points\n",
    "    \n",
    "A = create_A(x_from, x_to, 9)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 编写单点攻击过程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "metadata": {},
   "outputs": [],
   "source": [
    "def D(a, model):\n",
    "    alpha = 1\n",
    "    is_success = True\n",
    "    for e in range(epoch):\n",
    "        model.partial_fit(a)\n",
    "        result = model.predict(a)\n",
    "        if 1 in result:\n",
    "            alpha += 1\n",
    "            att_points = np.repeat(a, alpha, axis=0)\n",
    "            model.partial_fit(att_points)\n",
    "            is_success = False\n",
    "        else:\n",
    "            print(\"该数据点增量到{}时攻击成功\".format(alpha))\n",
    "            is_success = True\n",
    "            break\n",
    "    if (e == epoch -1) and (is_success == False):\n",
    "        print(\"该攻击点无法完成攻击\")\n",
    "    return is_success\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 编写完整采样攻击过程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "metadata": {},
   "outputs": [],
   "source": [
    "def Point_Search(A, model):\n",
    "    keep_success = True\n",
    "    for a in A[::step]:\n",
    "        result = D(np.array([a]), model)\n",
    "        if result == False:\n",
    "            print(\"攻击链断裂\")\n",
    "            keep_success = False\n",
    "            break\n",
    "    print(\"执行完成！\")\n",
    "    return keep_success"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0]\n",
      "[1]\n"
     ]
    }
   ],
   "source": [
    "print(model.predict(x_from))\n",
    "print(model.predict(x_to))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAD4CAYAAAAJmJb0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO2df3SU9Z3vX5+QkOQgJFKkCQQvhiJi22zhoqxa7hazJexqisdWj/e0xe3tLWf7EzgL1tQt5dJ6cIWziNtu92J/6dZ7vFS5YpZWtIHusWhRhDZWAZHULglJkdIEZJOQkO/9Y+YJM8nMZJ55fs98XudwhvnOk+f5ZpK85/t8vp/P+yPGGBRFUZT8pCjoCSiKoijeoSKvKIqSx6jIK4qi5DEq8oqiKHmMiryiKEoeUxz0BBKZMmWKmTlzZtDTUBRFiRSvvvrqaWPMFaleC5XIz5w5kwMHDgQ9DUVRlEghIr9P95qGaxRFUfIYFXlFUZQ8RkVeURQlj1GRVxRFyWNU5BVFUfIYFXlFUZQ8RkVeURQlj1GRVxRFyWNU5BUlG1q3w5YPwPrK2GPr9qBnpChZEaqKV0UJJa3bofkrMNAbe95zIvYcoO7O4OalKFmgK3lFGYuWDZcE3mKgNzauKCFHRV5RxqKn3d64ooQIV0ReRCpF5EkROSIih0XkBhGZLCLPi8ix+OPlblxLUXynosbeuKKECLdW8luBZ40x1wB/BhwG7gVajDGzgZb4c0VxjZ7mZo7dXM/huddy7OZ6epqbvblQ/TooKU8eKymPjStKyHEs8iIyCfhvwPcBjDEXjDHdwDLg0fhhjwK3Ob2Wolj0NDfT+fV1DJ48CcYwePIknV9f543Q190JjQ9DxQxAYo+ND+umqxIJxBjj7AQiHwK2AW8QW8W/CqwEOowxlQnH/ckYMypkIyIrgBUAV1555X/9/e/T2iIryjDHbq6PCfwIiqdNY/aelgBm5B6tra20tLTQ09NDRUUF9fX11NXVBT0tJcSIyKvGmAWpXnMjXFMMzAe+a4yZB5zHRmjGGLPNGLPAGLPgiitSNjZRlFEMdnbaGo8Kra2tNDc309PTA0BPTw/Nzc20trYGPDMlqrgh8u1AuzFmf/z5k8RE/w8iUg0QfzzlwrUUBYDi6mpb41GhpaWFgYGBpLGBgQFaWqJ7d/L0oQ5uemAPV927i5se2MPThzqCnlJB4VjkjTFdwAkRmRMfqicWunkGuDs+djew0+m1FMVi6upVSFlZ0piUlTF19aqAZuQO1go+2/Gw8/ShDpp2vEZHdy8G6OjupWnHayr0PuJWxeuXgcdFZDzQBnyG2AfIdhH5LPAfwB0uXUsJAecPneLs7re52N3PuMpSJjXMZMK8qb5dv6KxEYBTWx5isLOT4upqpq5eNTweVSoqKlIKekVFRQCzcc6m3UfpHbiYNNY7cJFNu49y27zpAc2qsHBF5I0xvwZSBf3r3Ti/Ei7OHzpF945jmIEhAC5299O94xiA70IfdVEfSX19Pc3NzUkhm5KSEurro/mndLK719a44j5a8arY5uzut4cF3sIMDHF299vBTCiPqKuro7GxcXjlXlFRQWNjY2Sza6ZVltsaV9xHDcoU21zs7rc1HgRv7u/ipZ3HefdMP5dNLuWGZbO4emFV0NPKirq6usiK+kjWNsyhacdrSSGb8pJxrG2Yk+GrFDdRkVdsM66yNKWgj6ssDWA2o3lzfxd7Hz/C4IXY3ca7Z/rZ+/gRgMgIfb5gxd037T7Kye5eplWWs7ZhjsbjfURFXrHNpIaZSTF5ACkpYlLDzOAmlcBLO48PC7zF4IUhXtp5XEU+AG6bN11FPUBU5BXbWJurQWbXZOLdM6nDRunGFSWfUZFXcmLCvKmhEfWRXDa5NKWgXzY5HOEkRfETza5R8o4bls2ieHzyr3bx+CJuWDYroBkpSnDoSl7JO6y4e1Sza/xATdAKBxV5JS+5emGVinoaLBM0q+DKMkEDVOjzEA3XKEqBkY8maEp6dCWvhILDL+zlhSce49wfTzPxPVNYdNdy5i5aHMhcOrt20nZ8M339nZSVVlM7aw3VVcsCmYsX5JsJmpIZFXklcA6/sJfntn2bwQuxjJhzp9/huW3fBvBd6Du7dnLkyH0MDcW8Vfr6T3LkyH0AeSP0+WaCpmRGwzVK4LzwxGPDAm8xeKGfF554zPe5tB3fPCzwFkNDvbQd3+z7XLyivr6ekpKSpLEom6ApmdGVvBI45/542ta4l/T1p+4slW7cCU91nWFjWycd/QNMLy2hqbaaj1dNdv06I7E2VzW7pjBQkc9TopQiN/E9Uzh3+p2U435TVlpNX//o3rFlpe52nHqq6wxrjp6gdyjWY7m9f4A1R08A+Cb0Yf19UNxFwzV5SNT6hC66aznF45OrUYvHl7LoruVpv6anuZljN9dzeO61HLu5np54CqBTametoago2Qa3qKic2llrXDm/xca2zmGBt+gdMmxsi3aPWiV86Eo+D8mUIhfG1Zu1uZptdk1PczOdX1+H6esDYPDkSTq/vg7AcRMRa3PV6+yajv4BW+OKkisq8nlIFFPk5i5anHUmzaktDw0LvIXp6+PUlodc6RRVXbXM80ya6aUltKcQ9OmlJSmOLgBat0PLBuhph4oaqF8HdXcGPau8QMM1eUi6VLh8SZEb7Ewd0kg3HkaaaqspL5KksfIioanW3dh/JGjdDs1fgZ4TgIk9Nn8lNq44RkU+D8n3FLni6tRCmG48jHy8ajKb58ygprQEAWpKS9g8Z4Yvm66ho2UDDIzo+TrQGxtXHONauEZExgEHgA5jzK0ichXwBDAZOAh82hhzwa3rKenxK0VuV9suth7cStf5LqomVLFy/kpuqb3F1WukYurqVUkxeQApK2Pq6lWeX9tNPl41uTBFfSQ97fbGFVu4GZNfCRwGJsWf/wOwxRjzhIj8C/BZ4LsuXk/JgNcpcrvadrH+xfX0XYwJbef5Tta/uB7Ac6G34u6ntjzEYGcnxdXVTF29ypV4vBIAFTXxUE2KccUxroRrRKQGuAX4Xvy5ADcDT8YPeRS4zY1rKeFg68GtwwJv0Xexj60Ht/py/YrGRmbvaWHu4TeYvadFBT7K1K+DkuS0VUrKY+OKY9xayT8E3ANMjD9/D9BtjBmMP28HUjZ5FJEVwAqAK6+80qXpKF7Tdb7L1rjiDecPnQptG8assbJoNLvGExyLvIjcCpwyxrwqIh+xhlMcalKMYYzZBmwDWLBgQcpjlPBRNaGKzvOjs1mqJoTbw72nuTlvwjznD51Kaqh+sbuf7h3HAKIp9CrqnuDGSv4m4GMi8tdAGbGY/ENApYgUx1fzNcDoWnElsqycvzIpJg9QNq6MlfNXBjirzHhZRDWSpw91sGn3UU529zKtspy1DXO4bV7Km9mcObv77WGBtzADQ5zd/barIu/H96J4h2ORN8Y0AU0A8ZX8GmPMJ0XkJ8AniGXY3A3sdHotJTxYm6teZ9e4GY7wuojK4ulDHTTteI3egYsAdHT30rTjNQBXxfFi9+hm5ZnGc8Gv70XxDi8rXr8KPCEi3wIOAd/38FqKQ3IR01tqb/E0k8btcIRfRVSbdh8dFkWL3oGLbNp91FVhHFdZmlLQx1WWpjg6N/z6XhTvcLUYyhjzC2PMrfH/txljrjfGvM8Yc4cxxr3lheIqlphagmGJ6flDpwKdV6ZwRC74VUR1srvX1niuTGqYiZQk/wlLSRGTGma6dg2/vhfFO7TiVXFdTN3C7XDE1NWrkLKypDEviqimVZbbGs+VCfOmUnn77OGV+7jKUipvn+1qPN6v70XxDjUoiwhv7u/ipZ3HefdMP5dNLuWGZbO4eqE7mSx+xHZzwe1whF9FVGsb5iTFsQHKS8axtmGOq9eBmNB7mUnj5/eieIOKfAR4c38Xex8/wuCF2Gr73TP97H38CIArQu9HbDcXJjXMTIrJg/NwREVjo+cpk1asOh8yUvLpeylUVOQjwEs7jw8LvMXghSFe2nncFZH3QkzdwFqhRrHY57Z50/NGCPPpeylEVOQjwLtnUodN0o3bJcxi6nU4QlHyHRX5CHDZ5NKUgn7ZZPfCKSqmipKfaHZNBLhh2SyKxyf/qIrHF3HDslkBzSj/efpQBzc9sIer7t3FTQ/s4elDHb5c1xiT8XkOJ8z8XMl7dCUfAay4u1fZNUoyQVV57t27l76+PpYuXYqIYIzh2WefpaysjMWLs2uNmHzCjdDXA0s3gkhM4J9tgrIKWNzk/jeQJV5miimjUZGPCFcvrIr0H0Jra6vnTUzcIogqT2MMfX197N+/H4ClS5fy7LPPsn//fhYuXIgxhpiDd9YnjAn8/ngLh6UbYwK//7uw8POx1+2czyW8zhRTRqMir3hOa2srzc3NDAzEGlf39PTQ3NwMEEqhD6LKU0RYunQpAPv37x8W+4ULFw6v7G2eMCbsEBN2S+wXfv7Syj4AvM4UU0ajMXnFc1paWoYF3mJgYICWlpaAZpQZL6o8s4m1Jwq9RU4Cf+mEl4R++ITBCTx4nymWiTf3d/Ho1/bxnb/dw6Nf28eb+wuj94GKvOI5PT09tsaDZm3DHMpLxiWNOanyfPEnj/OLRx8ZFnZjDL949BFe/MnjScdZMfhEnn322dw3X60YfNIJmwLdfE2XEeZmplgqrDCR9WFihYkKQehV5BXPqaiosDUeNLfNm87G2z/I9MpyBJheWc7G2z+YUzzeGEP/+fMc/Nkzw0L/i0cf4eDPnqH//Pkk4U+MwX/jG99g4cKF7N+/PzehtwTeisF/ozv2uP+7gQp9UJlimcJE+Y7G5BXPqa+vT4rJA5SUlFBfXx/grDLjVpWniPCRuz8HwMGfPcPBnz0DwPy/+hgfuftzw6EYEaGsrCwpBm+FbsrKypJCNlltworEsmgSY/BW6KasIrCQTVCZYkGGiYJGRV7xHGtzNSrZNW5jCb0l8ECSwFssXrw4ScBFhLaqNt4deJePmI8Mp1U++MqDTBw/kS986AuZL7y4KTmLxhJ6mwK/q22Xq81hgsgU86OgMKyoyNskLxonB0BdXV3BiPpIrBBNIr949JGUQj9yxf7uwLv8+PCPAbjnunt48JUH+fHhH/OpuZ/KfkWf6fkY7GrbldTmsfN8J+tfXA/gacMYt7lh2ayk1E0onIJCFXkb5FXj5ALFq0beIwXXep4Yg7dCNNZzSL2itxAR7rnuHgB+fPjHw2L/qbmf4p7r7sk968YGWw9uTerjC9B3sY+tB7dGSuQLuaBQRd4GfjVODiWt26FlA/S0Q0UN1K+DujuDnpUtvGrkvel3nZwdvMiG900fFvZ1b3UwqXgca6+qpnTChKQYvBWjL50wYUyhtoTeEnjAN4EH6DqfOvsk3XiYiXpBYa5odo0Nwtpco6e5mWM313N47rUcu7mennihkWu0bofmr0DPCcDEHpu/EhuPEJkaeeeKMYazgxd5pP00697qGBb4R9pPc3bwIsYYbrzjk6M2WT9y9+e48Y5PZnX+B195MGnswVcezJht46b/TdWE1KKYblwJHyryNkjXRCPI5hrW6nTw5EkwZnh16qrQt2yAgRHVngO9sXEPcdskzItG3iLChvdN53M1U3ik/TTVv/gNj7Sf5nM1U4ZX9tZxI79uLDG2BN6Kwbcub+VTcz/Fjw//OK3Q7927Nynl0krN3Lt3b07f38r5Kykbl9wysWxcGSvnr8zpfIr/OBZ5EZkhIntF5LCIvC4iK+Pjk0XkeRE5Fn+83Pl0g8WPxsl28WJ1OoqednvjLmCZhHV092K4ZBLmROi9auRtCX0iiQKfinf+6dv8YePGJDH+w8aNvPNP304678TxE5Ni8Pdcdw+fmvspJo6fOOr8if43ltBbufd9fX05rehvqb2F9Teup3pCNYJQPaGa9Teuj1Q8vtBxIyY/CPydMeagiEwEXhWR54G/AVqMMQ+IyL3AvcBXXbheYISxuYYXq9NRVNTEQzUpxj3CC5OwqatXJcXkwZ1G3laIJpF1b3WkFXpjDBfPneVPj/0rAO9tauIPGzfyp8f+lcuXfzppE/cLH/pCkjgnbsaOxHX/mzi31N6ioh5hHIu8MaYT6Iz//5yIHAamA8uAj8QPexT4BREXeQhfc43i6upYqCbFuGvUr4vF4BNDNiXlsXGP8MIkzItG3okxeCtEYz2H1Ct6EeG9TTG7gT899q/DYn/58k/z3qamUce/9OT/of/8+aS4/i8efYTSCRNGxfUtobcEHhz63yiRx9WYvIjMBOYB+4H3xj8ArA+C8ChjHjF19SqkLDlm6sbqNIm6O6HxYaiYAUjssfFhT7NrvDAJg5jQz97TwtzDbzB7T0tagc9281JEmFQ8LikGb8XoJxWPy5geaQm9RSqBz9YWIfF4V/1vPGJX2y6WPLmEukfrWPLkEna17Qp6SnmLuPXDF5HLgH8H7jfG7BCRbmNMZcLrfzLGjIrLi8gKYAXAlVde+V9///vfuzKfQsKr3O8gGdm4A2ImYbl6yNjhn3/9z5y7cG44Dp5NlWliXnyqx1THWyEai3Qr+URhtxhpi2Adl+h/M9KTPiwr+pEFVhDbzNVYf+6IyKvGmAWpXnNlJS8iJcBTwOPGmB3x4T+ISHX89WrgVKqvNcZsM8YsMMYsuOKKK9yYTsGR7eo0SrhpEmYHYwznLpxLymCxMlzOXTiXcUWfmNmS2NlpZGZLosBfvvzTXHP4DS5f/mn+9Ni/Jm3GJp7byq23SFctm8r/ZuHChaP8b4IkU4GV4j6OY/IS+835PnDYGPOPCS89A9wNPBB/3On0Wkph4ZZJmB1yrTK109lJRBg3cVLSyt0K3YybOCntSj6RdLYIqfxvwrKCt4h6gVVn107ajm+mr7+TstJqametobpqWdDTSovjcI2IfBh4AXgNsMpBv0YsLr8duBL4D+AOY8yZTOdasGCBOXDggKP5KIobPUSNMdQ9dslrp3V565hCmRguscgUJhkaGqKoqCjtc+uc6WwRUoVsEr/OtnPlCLwKAy55cgmd50dnf1VPqOa5Tzzn+Pxe0tm1kyNH7mNo6FICQFFROddcc3+gQu9puMYY80tjjBhj6owxH4r/+6kx5o/GmHpjzOz4Y0aBV/IXt4uaMuFGc4hcqkzBXmenLc+/yTd3HU7Kk//mrsNsef7NUedMZYsw/68+ltYWoa1tK8eOfSvp3MeOfYu2tuzDIV4W2UW5wKrt+OYkgQcYGuql7fjmgGY0NlrxqniKF0VNmXDaHCKXKtPEr80ms8UYw9m+AX647202/NsbGGPY8G9v8MN9b3O2b2DU8Tfe8Un+Yvn/TArB/MXy/5nSFsEYw+DgWU60/2hY6I8d+xYn2n/E4ODZrLNsvCyyi3KBVV9/6vqTdONhQA3KFE/xoqgpE06bQ6SrMgVSVplaZMpsgeQVvYiw7tZrAfjhvrf54b63AfjMTTNZd+u1o67xcnMb/b2DfPiO2cMbuvuefIvS8mKub6wdNf/Zs/8egBPtP+JE+48AmFHzN8ye/fdZh2y8LrKLaoFVWWk1ff2j61LKSl2sS3EZXckrnuJFUVMm3Ogh+oUPfSFpk9US+kxNOuxmtiQKvUUqgTfG0N87SOuedn75k2MYY/jlT47Ruqed/t7BtA3BLaG3sCPw4J0FRNSpnbWGoqLkWo2ionJqZ60JaEZjoyKveIpXRU3pcKuHaKZmHulYvHgxDQ0NSR8ODQ0NLF68eNSxVogmESt0M/K6H75jNnU319C6p51//vxeWve0U3dzzfDKPtW5jx37VtJYYow+G3wpsosg1VXLuOaa+ykrnQYIZaXTAt90HQsN1yiesrZhTsqiprUNczy5Xs7NIVzwy09VRLXpwKZRRVSJMXgrRGM9h9ErekvoW/dcMoQbS+BPtP9oOERjPYfsV/ReWEDkC9VVy0It6iNRkQ8ph1/YywtPPMa5P55m4numsOiu5cxdNHpFGHasuPum3Uc52d3LtMpy1jbM8TT/3XZzCMsv3/LmsfzyIWuhTyyigsyt+kSESWUlSTF4K3QzqawkZcjmlz85ljT2y58cSyn0IkJx8aSkGLwVuikuHp2Dn4mKxkYV9TzANVsDN9A8+RiHX9jLc9u+zeCFS5uFxeNLWbLiS54KvdsNmyPDlg+kcdmcAat/m/VpEjNzLDIVUVl/e9ZrI59bY1YM3grRjHzuVZ58VHj6UIevi4gw4rmtgeIuLzzxWJLAAwxe6OeFJx7z7JqWn0jn+U4MZrhhc0EYR7nkl5/KBjhTlewr//a74c1Ui1/+5BgvN7clnbO0vDhJ0D98x2zqFtdQWl486gMi8esyPc8X/E7RjSIq8iHk3B9P2xp3g7D7ibS2trJlyxbWr1/Pli1baG1tde/k6Xzxbfrl2ymispM1c31jbdKKffPbXTw3r5zrbr1q+Fzr3upg0+/Cm6vtFZlSdJUYKvIhZOJ7ptgad4Mw+4m0trbS3NxMT08PAD09PTQ3N7sn9PXrYv74idj0y7dbRGU3ayZxxX528CKPdPwxbU/ZQsLvFN0oohuvIWTRXctTxuQX3bXcs2tWTahK6ScShobNLS0tDAwMJI0NDAzQ0tJCXV1dmq+ygbW56iC7JpciKjtZM4lfY7UafKT99HBzkpE9ZcOAH8kD0yrL6Ugh6F6l6EYRFfkQYv0h+Jlds3L+ypQe32HwE7FW8NmO50TdnY6boFit+kYWUWWqks02ayYRS+gtgYexe8pmg5uiPDJ54Nzpd3huW6x/rZu/x36n6EYRFfmQMnfRYl9TJq0smjBm11RUVKQU9IqKigBmk5lsNzwzZc1A5hW93Z6y2eC2KGdKHnDz9zqIFN2ooSJvBxcKZsKMV34iTleI9fX1NDc3J4VsSkpKqK+vd32ufpEuawZIypoZSS49ZbPBbVH2M3kgiL4DUUJFPltcKJgpRNxYIVpx95aWFnp6eqioqKC+vj6neLzjWgAXP+ivb6wdFd7JJlSTqqcskLGn7Fi4LcoT3zOFc6ffSTmu+IuKfLa0bLgk8BYDvbFxFfm0uLVCrKurc7zJOrK3qFULAGQn9B580OeSz772qupRHw5OY/Jui3IQyQNKajSFMltcKpgpNILI+U+H41qATB/0PuN2sdOiu5ZTPD7ZqdOJKM9dtJglK77ExClXgAgTp1zhecW2khpdyWdLRU2a0nd7BTOFRphu2x3XAgT4Qe91OqIXGV1+Jw/4QRQtFFTks6V+XfKtOtgumClEwnTb7rgWIIcP+qe6zrCxrZOO/gGml5bQVFvNx6smZztlwL90xHwUZTexLBSsdE3LQgEItdBruCZb6u6ExodjplVI7LHxYY3Hj4FXt+272nax5Mkl1D1ax5Inl2TlseO4t6jNytinus6w5ugJ2vsHMEB7/wBrjp7gqS577Y6D8DJSRhNVCwVdydvBhYKZQsTtFWKuG6iOawFsVsZubOukdyjZZqB3yLCxrdPWaj5M+xqFTFQtFDwXeRFZCmwFxgHfM8Y84PU1lUv0NDfnXeOHTBuoYwm241oAGx/0Hf0DtsbT4XRfI8q9Cd7c32W/AYxHRNVCwVORF5FxwHeAjwLtwCsi8owx5o3MX1lYtLa2upIDPpKe5mY6v74O0xcTxMGTJ+n8eiy0EGWh99NMzUlMfXppCe0pBH16aYmtOTjZ1/Arnu8Fb+7vYu/jRxi8MATEmrHvffwIQCBCH1ULBa9j8tcDbxlj2owxF4AngOj0zfIBLx0WT215aFjgLUxfH6e2POT43EGSbqPUbTM1pzH1ptpqyouSUxvLi4SmWnvNsJ3sa0Q5nv/SzuPDAm8xeGGIl3YeD2Q+t82bzsbbP8j0ynIEmF5ZzsbbPxjqTVfwPlwzHUhMR2gHFiYeICIrgBUAV155pcfTCR9eOiwOdqb2F083HhVyNVPr7NpJ2/HN9PV3UlZaTe2sNRl7dTqNqX/81M9Z+sp6yt89SUfpVP5l9t8y/8N/Yzu7BnLf14hyPP/dM/22xv0gihYKXot8qgqNpL8aY8w2YBvE2v95PJ/Q4aXDYnF1NYMnT6YcjzK5bKB2du3kyJH7GBqKxVT7+k9y5Mh9AGmF3lFMPV4dOyGecjuj/w/cf/RBuLoGqvzbvHcaz/cqlJgNl00uTSnol00uTXG0kg6vwzXtwIyE5zXAaNUpYNI5KbrhsDh19SqkLDllUMrKmLp6lb0TtW6P9UFdXxl7bN3ueG5OuaX2Fp77xHO03t3Kc594bszN1Lbjm4cF3mJoqJe245vTfk262HlWMfWQVMc6qWT1vFnLGNywbBbF45Mlqnh8ETcsm+XL9fMFr0X+FWC2iFwlIuOBu4BnPL5mpKivr6ekJFk03HJYrGhspPqbGyieNg1EKJ42jepvbrC36Wr5tfScAMwlv5YQCL0d+vpTh6jSjYPDmHpIbDCcxPMzhRL94OqFVSz+5DXDK/fLJpey+JPXBJZdE1U8DdcYYwZF5EvAbmIplD8wxrzu5TWjhpsOi6moaGx0lknjoTGb3Ri5E8pKq+nrH30TWVaaXrCt2HlO2TUB2GCkC63kGs/3IpRoN53z6oVVKuoO8TxP3hjzU+CnXl8nW8KYN+6Gw6JneLQizSVG7oTaWWuSrgdQVFRO7aw1Gb/u41WTc9oo9dsGwwqtWCtvK7QC5Py75Xazliinc0aZgrI1sPLGB0+eBGOG88Z74n8MSgrSrTwdrkhziZE7obpqGddccz9lpdMAoax0Gtdcc79ndw5+22B4EVpxO5QY5XTOKFNQtgaZ8saDXs2HFo9WpLnEyJ1SXbXMO1FPhY3qWKfNTLwIrbgdSgxLOqefYcIwUFAin695455i068lW3KJkafCb+tXL8rsHTczwbs+uG6GEsNgO+13mDAMFFS4Jl1+eNTzxj2n7k5Y/VtY3x17dCHkUDtrDUVFyZ4f2cTIE7GsXzu6ezFcsn59+lDHmF8LsfDdsZvrOTz3Wo7dXD9m2M4qs7dyt60y+zf3O7NTcNzMBG+ztNzC7cYkueB3mDAMFNRKfurqVUleLpBj3riPuLVSDZPRE1xaNTm5bc5k/TrWe5SLr0+mMvtU7+X5Q6c4u/ttLnb3M66ylEkNM5kwb+qo43L14hkZdvjoR/TrdlkAABjTSURBVO9k377BQAqXssGLxiR2CSJMGDQFJfLWH69X2TVuu/251aQgbEZPFk5j5E6sX3PZn7FTZn/+0Cm6dxzDDMTe84vd/XTvOAYwSuhzaWaSKuxwYeB/c9d/z34zOYhMs6Abk7gVJowSBRWugZjQz97TwtzDbzB7T4urAv/ctm/HYo7GDKeHHX5hb87ndKtJQdiMntwincVrNtavuezPpCunTzV+dvfbwwJvYQaGOLv77VHH5tLMxGnYoVAzzdwIE0aNghN5r/AiPcytJgVhNHpyg7UNcygvGZc0lq31ay77M3bK7C92p35vU43fUnsL629cT/WEagShekI1629cn3HT1WnYIV8dSsfC91TaEFBQ4Rov8SI9zK0mBflq9GSFrHLZs8hlf8YKbWWztzGusjSloI+rTP2e221m4jTsUMiZZr6n0gaMirxLeJEe5laTghuWzUqKycPYRk/ZbhoGTa7Wr7nuz2RbZj+pYWZSTB5ASoqY1DDT9lxTkWsFr4XbDqVeb+yHLXEgSqjIu4ST7j3pcLJSTcTOChTsbRpGGce+Phmw3qffPnWM1//YT6+BCZeVcOOFIa524fxOs5PczDTzemM/rIkDUUFF3iW8Sg9zq0mBHaOnTJuGY4m8k3Z5YcduNkrHhSF+fXaAwXiXhPPvDrgqTk7CDm5mmtlNLQ3b+fMdFXkXCSI9zIuwip1Nw0SsdnlWNyWrXR4QeaH3I6/eDm6U5rt1J+P1xn6+Jg74hYp8hPEqrGJ309DCabu8TLhdg2AXr/Pq7RC20nyvN/bzMXHAzz0vFfmAcKOtmpOwSiZy3TR01C4vA25Z1DqpHs41r94LccqUIx+EyOeysR+m8/uN33temicfAG61Vcs1rDIWE+ZNpfL22cMr93GVpVTePnvMX0BH7fIy4EYNglOfG6/z6u0QttJ8rzs45VuHKDuFcm6QVyv5oG/psyWT97ed1XyuYZVsmDBvqu1VRVNtdVJMHmy0y8uAGzUITnxuwPu8ejuEsTTf6w5O+dQhyqvFWTryRuSj1HXGLe9vr3Ox7eKoXV4G3KhBcFo97HVevR2c5sgXmp962PBycZaKvBH5TLf0YRN5u97f6TZprJV2Nhs4fqU25twuLwNu1CC4UT3sVV693f0ZJznyYdu0LUT8XpzljciHpetMNtTX1yf144T03t9jbdJkE1aJemqjGzUIWVUPt253vTnKWOTamzXXHPmwbdoWInYWZ27gSORFZBPQCFwAjgOfMcZ0x19rAj4LXAS+YozZ7XCuGQlD15lssdNWzY0MGi9TG/3CaQ3CmNXDrduT2xz2nIg9B1tCb7f83q39mWwJ26ZtoZLLnleuOF3JPw80GWMGReQfgCbgqyJyLXAX8H5gGvBzEbnaGHMxw7kc4YWtQDrcCH1k21bNjU0ar1Ibo0bG6uGWDcl9bCH2vGVD1iKfS/m9F71ZMxHGTVtfCeBuLWgcpVAaY54zxgzGn/4KqIn/fxnwhDGm3xjzO+At4Hon1xqLuYsWs2TFl5g45QoQYeKUK1iy4kuux+Ot0Ed7/wCGS6GPp7rOuHodi3SbMXY2abxKbcwretrtjacgF9/+dPswieOdXTvZt28RLXvex759i+js2pn1nEZSiH7qw1h3az0nAHPpbq11e9Az8xQ38+T/B/Cz+P+nAycSXmuPj41CRFaIyAEROfDOO6PDLXaYu2gxK77zQ/7uiWZWfOeHnmy4Zgp9eMGkhplISfKPye4mTVNtNeVFkjRmJ7XRbi/USFJRY288BblUuI7Vm9XaKI2tvs3wRmmuQh8GP3U3P7RskeluLY8ZM1wjIj8HUt1r3meM2Rk/5j5gEHjc+rIUx5sUYxhjtgHbABYsWJDymDDhd+jDjU0aJ6mNuXi2RJL6dckxeYCS8th4luRS4TrW/owXG6VB+qkHmt3jwt1aFBlT5I0xf5npdRG5G7gVqDfGWCLdDsxIOKwGGB0IjCDTS0toTyHojkMfGWKFbmzS5JramItnS1iw5RppxWUdxGtzLb/PtD+TbxulgWb3VNTEQzUpxvMYp9k1S4GvAn9hjPnPhJeeAf6PiPwjsY3X2cDLTq4VFjyp6nQps8MLwtZBKNvslZzuQOrudPR+e1HhOtZG6a62XWw9uJWu811UTahi5fyVtjpM+U2gH1ou3K1FEafZNd8GSoHnRQTgV8aYvzXGvC4i24E3iIVxvuhlZo2feFLV6UJmh1e43UHICXayV4K6A3G7wjVTdeuutl2sf3E9fRdj32fn+U7Wv7gewFWhd9MxMdDsHhfu1qKII5E3xrwvw2v3A/c7OX9Ycb2qM8SxQjc7CDnFjj972O5AUpFNKm6m6tatTy4ZFniLvot9bD241TWRd9sx0aklg2Mc3q1FkbypeI00LsQKvfKndrODkFPsZK94cQfixKp4JHaqkNNtlHad70p57nTjueC2nbXTtoWKfVTkw4DDWKHX/tRe9kK1g53sFbfvQCyrYssWwbIqBnISejeqkKsmVNF5fvSdSdUE98JFXjgmBpndU4ion3wYqLsTGh+GihmAxB4bH876ttJvf+qgsOPPXtHYSPU3N1A8bRqIUDxtGtXf3JDzh1Umq+JccCMVd+X8lZSNK0saKxtXxsr5K3OaUyrcKMZTgkVX8mHBQazQb3/qoLCbveLmHYhTq+KRuJGKa8XdvcyuCZudtWIfFfk8wG9/6iAJqnmEG1bFibiVintL7S2epkz67ZiouI+KfB4QxdVW1BpXpLIq/sT4F9kgT8H6LtvpeF41WPECPx0TFfcpeJH3q5mGl0RttRXFxhUjrYrvvuxl/t58j+Le+MZuDgVsXjRYUZSRyCUnguBZsGCBOXDggG/XG5nGBrFb5s1zZnjyxxeVHrRes2/fojQFMdO46aYXAphRDmz5QJq01xmw+rf+z2cM9HcvvxGRV40xC1K9VtDZNX46Slo9aM+dfgeMGe5Be/iFva5fK1ee6jrDghdfp3rvr1nw4uue2ScH7sfSuj0m0usrY4+5WM2GuIBtJFH43VO8o6BF3k9HyUw9aMOAnz756UrYfSltd8tT3AVrYr8I+++eHc4fOkXnAy/Tfu8LdD7wMucPnQp6SqGnoEXez2YaYe9B6+ddTaCNK9zyFK9fFytYS8RFs6tdbbtY8uQS6h6tY8mTS9jVtivnc4X9dy9brKI/K5PMKvpToc9MQW+8euIomYaw96D1864m0NJ2t8IsHppduW085ufvXmtra1a9i3PBbYuFQqGgRd7PNDY/e9Dmgmc++WkIrLTdTU9xj8yuth7c6qrxmF+/e62trTQ3Nw83Ju/p6aE53kXMDaEvlKI/tylokQf/0tisTIawZjj4eVfjJyNNxR669stc99o3Qu0p7rbxmF+/ey0tLcMCbzEwMEBLS4srIh9U0V/UPPtHUvAi7ydzFy0OjaiPJErFOdmSylRs+Sv/hceu+19cd/yfQusp7oXxmB+/ez09PbbG7RJE0Z9fnv1eoiIfZTK0DMyFfCvOSWcqtuqN2ey711kuu5d55yvnr0wSFnDfeMwLKioqUgp6RUWFK+cPoujP7dBZEKjIR5UQtwwMC26billYeedWjNvKOwdcEXo/jMe8oL6+PikmD1BSUkJ9fb1r1/DbYsEPz36vUZGPKiFuGRgW3DYVs8iUd+7Wat5r4zEvsOLuXmXXBIEfnv1eoyIfVSJUcZkJLze1UpmKlZeMY23DHEfnzZe8cy+oq6uLtKiPJKqhs0RU5KOKm6mAAeH1ptZIUzGnLfsswl7zoLhHVENnibhiUCYia4BNwBXGmNMiIsBW4K+B/wT+xhhzcKzz+G1QFmlGxuQhlgpoo6NU0Cx5cknKW+HqCdU894nnAphRdoyMyUMs73zJii8Nh2u86rnrNvngwqpkNihzvJIXkRnAR4H/SBj+K2B2/N9C4LvxR8UtPKy49IuobmqNlXfudc9dt7DTTFyJLm6Ea7YA9wA7E8aWAY+Z2G3Cr0SkUkSqjTE+2QwWCB5VXPpFlDe1MuWdR6X83o1m4kr4cWRQJiIfAzqMMb8Z8dJ0IDFg3B4fS3WOFSJyQEQOvPPO6Dinkr/40Yg6CKJSfu+nX5ESHGOu5EXk50CqpdV9wNeAJam+LMVYyuC/MWYbsA1iMfmx5hMmvDRjKgSiuKnV09zMqS0PMdjZSXF1NVNXrxrVLNyr8nu3M5H89itSgmFMkTfG/GWqcRH5IHAV8JvYPis1wEERuZ7Yyn1GwuE1wOhWQBHGazOmfMfamPyz7kk8Wvmt0G5MJtLT3Ezn19dh+mLZQIMnT9L59ZjnTaLQe1F+70UmUr76FSnJ5ByuMca8ZoyZaoyZaYyZSUzY5xtjuoBngOUS48+BnnyLx2cyY1IyE1Vf8FNbHhoWeAvT18epLQ8ljU2YN5XK22cPr9zHVZZSeftsRx9imcrrc+XjVZPZPGcGNaUlCFBTWuJZ60slOLzKk/8psfTJt4ilUH7Go+sEhtdmTEHR2bXTc5/3qGxMjmSwM/U6JdW42+X3XmUi5ZtfkTIa10Q+vpq3/m+AL7p17jDitRlTEHR27eTIkfsYGorl3vf1n+TIkfsAXBX6qGxMjqS4uprBk6OjjsXV3oc3opyJpARLQbf/c0J9fT0lJckbVG6bMflN2/HNwwJvMTTUS9vxza5eJ90GpNu+4G43Jp+6ehVSlpwNJGVlTF29ytF5syFfM5Fyxa+m8/mA2hrkSD6aMfX1pw5HpBvPFT98wb0o9LE2V8fKrvGCKGQi+dVcQ4u47OGKrYFbqK1BsOzbt4i+/tHhiLLSadx00wuuXsvrsv8FL76eMj2wprSEAze+37XrKDFGZv9A7E5j/Y3rXRd6/dmOxlNbAyV/qJ21JikmD1BUVE7trDWuX8trX3At9PEXP5tr6M/WHiryEcCvoitrc9Xr7Bo/0EIff/HTh0h/tvZQkQ85fhddVVcti6Soj0QLffzFz+wf/dnaQ7NrQo4WXeWGFvr4i5/ZP/qztYeu5ENOvhZd+YEW+viH39k/+rPNHhX5kJOPRVdKfhLFvrSFgIZrQk4+Fl0piuIfKvIhp66ujsbGxuGVe0VFBY2NjZEuulKCo6e5mWM313N47rUcu7menvgmvpK/aLgmAtTV1amo5zF+9YPN1ipZyS9U5BXPeHN/Fy/tPM67Z/q5bHIpNyybxdUL1VArET/7wWaySlaRz180XKN4wpv7u9j7+BHePRNzlnz3TD97Hz/Cm/vD3aTbbzLZLruNHatkJX9QkVc84aWdxxm8kCxegxeGeGnn8YBm5D6dXTvZt28RLXvex759i+js2jn2F43AT9vldJbIflglK8GhIq94grWCz3Y8alje+zFDNzPsvW9X6P2yXYZgrZKV4FCRVzzhssmpRSrduFOePtTBTQ/s4ap7d3HTA3t4+lCHJ9excMt7f1LDTKQk+c/Qbdtli4rGRqq/uYHiadNAhOJp06j+5gaNx+c5uvGqeMINy2ax9/EjSSGb4vFF3LBsluvXevpQB007XqN34CIAHd29NO14DYDb5k13/Xrgnve+tbnqR3YNxIReRb2wUJFXPMHKovEju2bT7qPDAm/RO3CRTbuPeibyZaXVabz37ce3vbZdVgobFXnFM65eWOVLyuTJ7l5b427gp/e+ojhBY/JK5JlWWW5r3A2qq5ZxzTX3U1Y6DRDKSqdxzTX354VNs5JfOF7Ji8iXgS8Bg8AuY8w98fEm4LPAReArxpjdTq+lKKlY2zAnKSYPUF4yjrUNczy9br547yv5jSORF5HFwDKgzhjTLyJT4+PXAncB7wemAT8XkauNMRfTn01RcsOKu2/afZST3b1MqyxnbcMcz+Lxirs81XWGjW2ddPQPML20hKbaarURdhGnK/nPAw8YY/oBjDGn4uPLgCfi478TkbeA64GXHF5PUVJy27zpKuoR5KmuM0ldntr7B1hz9ASACr1LOI3JXw0sEpH9IvLvInJdfHw6cCLhuPb42ChEZIWIHBCRA++8847D6ShKSGndDls+AOsrY4+t24OeUSjY2NaZ1MYPoHfIsLFNrRbcYsyVvIj8HEiVInFf/OsvB/4cuA7YLiK1gKQ43qQYwxizDdgGsGDBgpTHKEqkad0OzV+BgXgmTs+J2HOAujuDm1cI6EjRkDvTuGKfMUXeGPOX6V4Tkc8DO4wxBnhZRIaAKcRW7jMSDq0BRicVK0oh0LLhksBbDPTGxgtc5KeXltCeQtCnl5akOFrJBafhmqeBmwFE5GpgPHAaeAa4S0RKReQqYDbwssNrKUo06Wm3N15ANNVWU16UfONfXiQ01appmls43Xj9AfADEfktcAG4O76qf11EtgNvEEut/KJm1igFS0VNLESTarzAsTZXNbvGOySmyeFgwYIF5sCBA0FPQ1HcZWRMHqCkHBofLvhwjeIOIvKqMWZBqtfU1kBRvMYS8pYNsRBNRQ3UrwtE4J8+1KH1BAWGiryi+EHdnYGv2oNw61SCR71rFKVAyOTWqeQvKvKKUiAE4dapBI+Ga5S8prNrJ23HN9PX30lZaTW1s9YUrKnYtMpyOlIIupdunUrw6EpeyVvc6sOaL6xtmEN5ybikMT/cOpVgUZFX8ha3+rDmC7fNm87G2z/I9MpyBJheWc7G2z+om655joZrlLzFrT6s+YS6dRYeupJX8pZ0/VZz6cOqKFFFRV7JW2pnraGoKHlTUfuwKoWGhmuUvMXKotHsGqWQUZFX8hrtw6oUOhquURRFyWNU5BVFUfIYFXlFUZQ8RkVeURQlj1GRVxRFyWNU5BVFUfIYFXlFUZQ8JlQ9XkXkHeD3Qc8jC6YAp4OehA2iNF+dqzfoXL0jDPP9L8aYK1K9ECqRjwoiciBd09wwEqX56ly9QefqHWGfr4ZrFEVR8hgVeUVRlDxGRT43tgU9AZtEab46V2/QuXpHqOerMXlFUZQ8RlfyiqIoeYyKvKIoSh6jIm8TEfmyiBwVkddF5MGE8SYReSv+WkOQc0xERNaIiBGRKfHnIiIPx+faKiLzQzDHTSJyJD6f/ycilQmvhe59FZGl8fm8JSL3Bj2fkYjIDBHZKyKH47+nK+Pjk0XkeRE5Fn+8POi5WojIOBE5JCL/Fn9+lYjsj8/1/4rI+KDnCCAilSLyZPz39bCI3BDm9xVU5G0hIouBZUCdMeb9wOb4+LXAXcD7gaXAP4vIuMAmGkdEZgAfBf4jYfivgNnxfyuA7wYwtZE8D3zAGFMHvAk0QTjf1/j1v0PsfbwW+O/xeYaJQeDvjDFzgT8Hvhif471AizFmNtASfx4WVgKHE57/A7AlPtc/AZ8NZFaj2Qo8a4y5BvgzYnMO8/uqIm+TzwMPGGP6AYwxp+Ljy4AnjDH9xpjfAW8B1wc0x0S2APcAibvry4DHTIxfAZUiEmhna2PMc8aYwfjTXwE18f+H8X29HnjLGNNmjLkAPEFsnqHBGNNpjDkY//85YkI0ndg8H40f9ihwWzAzTEZEaoBbgO/FnwtwM/Bk/JBQzFVEJgH/Dfg+gDHmgjGmm5C+rxYq8va4GlgUv438dxG5Lj4+HTiRcFx7fCwwRORjQIcx5jcjXgrdXEfwP4Cfxf8fxrmGcU5pEZGZwDxgP/BeY0wnxD4IgKnBzSyJh4gtRobiz98DdCd88IflPa4F3gF+GA8tfU9EJhDe9xXQHq+jEJGfA1UpXrqP2Pt1ObFb4OuA7SJSC0iK4z3PTR1jrl8DlqT6shRjgc7VGLMzfsx9xEINj1tfluL4oHN+wzinlIjIZcBTwCpjzNnYAjlciMitwCljzKsi8hFrOMWhYXiPi4H5wJeNMftFZCshC82kQkV+BMaYv0z3moh8HthhYsUFL4vIEDFzonZgRsKhNcBJTydK+rmKyAeBq4DfxP+wa4CDInI9IZurhYjcDdwK1JtLxRuBzHUMwjinUYhICTGBf9wYsyM+/AcRqTbGdMZDdKfSn8E3bgI+JiJ/DZQBk4it7CtFpDi+mg/Le9wOtBtj9sefP0lM5MP4vg6j4Rp7PE0sVoiIXA2MJ+Y+9wxwl4iUishVxDY1Xw5qksaY14wxU40xM40xM4n9cs43xnTF57o8nmXz50CPdasZFCKyFPgq8DFjzH8mvBSq9zXOK8DsePbHeGIbw88EPKck4jHt7wOHjTH/mPDSM8Dd8f/fDez0e24jMcY0GWNq4r+ndwF7jDGfBPYCn4gfFpa5dgEnRGROfKgeeIMQvq+J6EreHj8AfiAivwUuAHfHV52vi8h2Yj/wQeCLxpiLAc4zEz8F/prYJuZ/Ap8JdjoAfBsoBZ6P33n8yhjzt8aY0L2vxphBEfkSsBsYB/zAGPN6kHNKwU3Ap4HXROTX8bGvAQ8QCzF+lljG1R0BzS8bvgo8ISLfAg4R3+wMAV8GHo9/wLcR+/spIsTvq9oaKIqi5DEarlEURcljVOQVRVHyGBV5RVGUPEZFXlEUJY9RkVcURcljVOQVRVHyGBV5RVGUPOb/AyLXCK4iQ97nAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "attacked_y_pred = model.predict(x)\n",
    "plot(plt_x, attacked_y_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.4 编写优化过程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "采样库数量：8\n",
      "(9, 983)\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到83时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "执行完成！\n",
      "采样库数量：7\n",
      "(8, 983)\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到114时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "执行完成！\n",
      "采样库数量：6\n",
      "(7, 983)\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到75时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "执行完成！\n",
      "采样库数量：5\n",
      "(6, 983)\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到69时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "执行完成！\n",
      "采样库数量：4\n",
      "(5, 983)\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到69时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "执行完成！\n",
      "采样库数量：3\n",
      "(4, 983)\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到94时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "执行完成！\n",
      "采样库数量：2\n",
      "(3, 983)\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到94时攻击成功\n",
      "该数据点增量到1时攻击成功\n",
      "执行完成！\n",
      "采样库数量：1\n",
      "(2, 983)\n",
      "该数据点增量到1时攻击成功\n",
      "该数据点增量到94时攻击成功\n",
      "执行完成！\n"
     ]
    }
   ],
   "source": [
    "result = True\n",
    "while result:\n",
    "    model = joblib.load(\"model/kmeans.m\")\n",
    "    points_num -= 1\n",
    "    if points_num > 0:\n",
    "        print(\"采样库数量：{}\".format(points_num))\n",
    "        A = create_A(x_from, x_to, points_num)\n",
    "        result = Point_Search(A,model)\n",
    "    else:\n",
    "        break"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 攻击分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "采样库数量：9\n",
      "(10, 983)\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "执行完成！\n",
      "采样库数量：8\n",
      "(9, 983)\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "执行完成！\n",
      "采样库数量：7\n",
      "(8, 983)\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "执行完成！\n",
      "采样库数量：6\n",
      "(7, 983)\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点失败！\n",
      "攻击链断裂\n",
      "执行完成！\n"
     ]
    }
   ],
   "source": [
    "model = joblib.load(\"model/kmeans.m\")\n",
    "points_num = 10\n",
    "step = 1\n",
    "\n",
    "def Create_A(x_from, x_to, points_num):\n",
    "    x1 = x_from[0,:]\n",
    "    x2 = x_to[0,:]\n",
    "    points = []\n",
    "    for index in range(x1.shape[0]):\n",
    "        points.append(np.linspace(x1[index],x2[index],points_num))\n",
    "    points = np.array(points).T\n",
    "    points = np.vstack([points, x2])\n",
    "    print(points.shape)\n",
    "    return points\n",
    "\n",
    "def Point_Attack(a, model):\n",
    "    alpha = 1\n",
    "    att_points = np.repeat(a, alpha, axis=0)\n",
    "    model.partial_fit(att_points)\n",
    "    if 1 in model.predict(a):\n",
    "        print(\"该点失败！\")\n",
    "        is_success = False\n",
    "    else:\n",
    "        print(\"该点攻击成功！\")\n",
    "        is_success = True\n",
    "    return is_success, model\n",
    "\n",
    "def Point_Search(A, model):\n",
    "    keep_success = True\n",
    "    for a in A[::step]:\n",
    "        result, model = Point_Attack(np.array([a]), model)\n",
    "        if result == False:\n",
    "            print(\"攻击链断裂\")\n",
    "            keep_success = False\n",
    "            break\n",
    "    print(\"执行完成！\")\n",
    "    return keep_success, model\n",
    "\n",
    "def Opt(points_num):\n",
    "    result = True\n",
    "    while result:\n",
    "        model = joblib.load(\"model/kmeans.m\")\n",
    "        points_num -= 1\n",
    "        if points_num > 0:\n",
    "            print(\"采样库数量：{}\".format(points_num))\n",
    "            A = Create_A(x_from, x_to, points_num)\n",
    "            result, model = Point_Search(A,model)\n",
    "        else:\n",
    "            break\n",
    "            \n",
    "\n",
    "Opt(points_num)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. 最终攻击过程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(10, 983)\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "该点攻击成功！\n",
      "执行完成！\n",
      "[0]\n",
      "[0]\n",
      "攻击成功了！\n"
     ]
    }
   ],
   "source": [
    "points_num = 7\n",
    "\n",
    "model = joblib.load(\"model/kmeans.m\")\n",
    "A = Create_A(x_from, x_to, 9)\n",
    "result, model = Point_Search(A,model)\n",
    "\n",
    "print(model.predict(x_from))\n",
    "print(model.predict(x_to))\n",
    "\n",
    "if 0 in model.predict(x_to):\n",
    "    print(\"攻击成功了！\")\n",
    "    if 1 in model.predict(x_from):\n",
    "        print(\"效果超凡！\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. 后记\n",
    "* 这种攻击，就是权衡 A 与 Alpha 的数据量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "attacked_y_pred = model.predict(x)\n",
    "plot(plt_x, attacked_y_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
